package educar.controllers;


import java.io.File;
import java.io.IOException;

import educar.gui.IView;
import educar.gui.teacher.AddActividad;
import educar.idioma.Locale;

import educar.listeners.FileUtils;
import educar.models.Actividad;
import educar.models.Materia;


/**
 * Permite crear una actividad
 */
public class AddActividadController implements IController {
	private AddActividad view;
	
	public void process(String model){
		if(null!=view) {
			/*obtengo los datos y compruebo validez*/
			String codigo = view.getCode();
			String descripcion = view.getDescription();
			File archivo = view.getArchivo();
			Materia materia = view.getMateria();
			if(codigo.length()==0 ||descripcion.length()==0 || archivo==null) {
				view.presentWarning(Locale.EMPTY_FIELDS, Locale.ERROR);
			}
			else {
				/*si los datos son validos obtengo el file_path y creo la actividad*/
				/* ej: /CodigoMateria/codigoActividad.NombreArchivo */
				String file_path = archivo.getName();
				Actividad newActividad = new Actividad("", codigo, materia, descripcion, file_path);
				boolean result = newActividad.save();
				if (!result) {
					view.presentWarning(Locale.CODE_IN_USE, Locale.ERROR);
				}
				else {
					/*si se guardo la actividad guardo el archivo*/
					try {
						guardarArchivo(archivo,materia,codigo);
					} catch (IOException e) {
						/*si no se pudo guardar el archivo borro la actividad*/
						view.presentWarning(Locale.SAVE_FILE_ERROR, Locale.ERROR);
						newActividad.destroy();
					}
					view.present(Locale.ACTIVITY+" "+Locale.SAVED);
					view.close();
				}
				
			} 
		}	
	}
	
	
	/**
	 * Permite guardar el archivo cargado
	 * @param archivo File a guardar
	 * @param materia Materia que lo guarda
	 * @param codigoActividad Actividad que lo contiene
	 * @throws IOException Si no se pudo guardar
	 */
	private void guardarArchivo(File archivo,Materia materia,String codigoActividad) throws IOException {
		/*obtengo la ruta desde donde se ejecuta el progrmaa y agrego /activity_files */
		String appPath = System.getProperties().getProperty("user.dir")+File.separator+"activity_files";
		/*agrego el codigo de la materia*/
		String materiaPath = appPath+File.separator+materia.getCodigo();
		/*valido el directorio o creo la carpeta segun corresponda*/
		FileUtils.validateDir(materiaPath,true);
		/*armo la ruta completa del archivo a crear*/		
		String archivoPath = materiaPath+File.separator+codigoActividad+"."+archivo.getName();
		/*creo el nuevo archivo*/
		File destino = new File(archivoPath);
		/*copio el archivo subido al nuevo archivo*/
		FileUtils.copy(archivo, destino);
	}
	
	
	public void setView(IView view) {
		this.view = (AddActividad) view;		
	}	
}